Онлайн-справочник по самым часто задаваемым вопросам из темы "Как сделать?" на форуме QSP.su

< Назад, к странице 178
Вперёд, к странице 180 >

Зарезервированные слова, системные переменные и спецсимволы

Синтаксемы и спецсимволы

END

Ключевое слово (оператор), отмечающее окончание многострочной конструкции. Многострочными могут быть действия, конструкции условий, циклов. Примеры:

    ! открываем условие
    if obj "Кувшин":
        *pl "У вас есть кувшин."
    ! закрываем условие
    end

    ! открываем действие
    act "Взять яблоко":
        яблоко+=1
        addobj "Яблоко"
    ! закрываем действие
    end

    loop local i=0 while i<10 step i+=1:
        *pl "Проход <<i+1>>: i=<<i>>"
    end

Каждая многострочная конструкция должна завершаться ключевым словом end. Однако здесь работают такие же правила, как для HTML-тегов или скобок: если мы вкладываем одну конструкцию в другую, сначала необходимо закрывать последнюю открытую конструкцию:

        ! открываем условие
        if obj "Пустой кувшин":
            ! код, который относится к условию
            *pl "У вас есть пустой кувшин."
            ! открываем действие
            act "Наполнить кувшин":
                ! код который относится к действию
                delobj "Пустой кувшин"
                addobj "Полный кувшин"
            ! закрываем ДЕЙСТВИЕ
            end
            *pl "Кувшин можно наполнить из колодца."
        ! закрываем УСЛОВИЕ
        end

Можно использовать не просто end, а end if, end act и end loop:

        ! открываем действие
        act "Купить 10 стрел по 5 рублей":
            ! открываем условие 1 уровня
            if money>=10*5:
                arrow+=10
                money-=10*5
                ! открываем условие 2 уровня
                if no (obj "Стрелы"):
                    addobj "Стрелы"
                ! закрываем условие 2 уровня
                end if
            else
                *pl "Вам не хватает денег."
            ! закрываем условие 1 уровня
            end if
        ! закрываем действие
        end act

Вообще, после ключевого слова end допускается, но не одобряется, запись любого текста. При этом игнорируется весь текст до следующей команды. Если команда записывается в той же строке, что и end, то эта команда должна стоять после амперсанда (&):

        ! открываем действие
        act "Взять яблоко":
            яблоко+=1
            addobj "Яблоко"
        ! закрываем действие
        end присутствие этого текста после end не одобряется & *pl "Новая команда"

Метки :

Метки — это особые синтаксические конструкции (а вернее меньше, чем конструкции, — синтаксемы), которые отмечают указанную строку кода и служат для быстрого перемещения к таким строкам с помощью оператора JUMP. Общая запись:

        :[название метки]

, где [название метки] — теоретически любое сочетание символов, однако на практике желательно использовать лишь буквы, цифры, символы подчёркивания и пробелы. Перед двоеточием могут стоять символы пробелов и табуляции в любом количестве. Так же игнорируются прилегающие к названию метки символы пробелов и табуляций (однако ставить их не рекомендуется для удобства чтения кода).

        ! рекомендуемый вариант использования метки
        jump 'метка'
        ! ...
        :метка
        ! рабочий вариант с игнорированием прилегающих пробелов в метке
        jump "метка с прилегающими пробелами"
        ! ...
        : метка с прилегающими пробелами
        ! рабочий вариант с игнорированием прилегающих пробелов в jump
        jump "  метка с прилегающими пробелами  "
        ! ...
        :метка с прилегающими пробелами

Непосредственно после метки, в той же строке, через амперсанд (&) могут идти любые другие команды, однако так делать не рекомендуется.

        ! метка с командами после неё
        jump 'markdown'
        ! ...
        :markdown & *pl "вывожу текст" & ! комментарий

Метки не чувствительны к регистру:

        jump "FoR"
        ! ...
        :for

Оператор jump "видит" метки только внутри текущего блока кода. Иными словами метки локальны, метки с одинаковыми названиями могут располагаться на разных локациях, в разных блоках кода).

Если метки с одинаковыми названиями расположены в одном блоке кода, то все дублирующие метки, кроме самой первой, игнорируются плеером.

Отдельными блоками кода считаются:

Случайные метки, то есть метки, на которые в текущем блоке кода нет перехода с помощью jump, просто игнорируются интерпретатором.

Амперсанд &

& — символ амперсанда служит для перечисления команд в одной строке. Общая запись:

        [команда 1] & [команда 2] & ...

Данный символ не следует путать с операцией объединения строк (конкатенация), а использовать нужно с осторожностью.

Примеры:

        *pl "Я сорвал с ветки яблоко." & addobj "Яблоко" & яблоко+=1

        a=3 & b=7 & g=rand(1,6) & ("26"&"27") & ! в скобках — конкатенация

Запятая ,

Запятая , в QSP используется для перечисления аргументов, передаваемых различным операторам и функциям:

    rgb(25,67,250)
    max(12,45,67,89,90,122,135,168,90)
    addobj "Отвёртка","img/screwdriver.png"
    gosub "add_object","Апельсин",2,"Еда",37

Круглые скобки ()

Круглые скобки () в QSP используются в двух случаях:

  1. В различных выражениях скобки повышают приоритет операций (операции в скобках выполняются в первую очередь):
  1. Если нужно передать функции более одного аргумента следует помещать всю группу аргументов в скобки:

Квадратные скобки []

Квадратные скобки [] в QSP используются для указания индекса ячейки массива:

    ! присваиваем значение седьмой ячейке массива $mass
    $mass[7]="textstring"

Для индексации ячеек массивов можно использовать строковые значения:

    $mass["x:4,y:6"]="map-dot"

Если квадратные скобки после названия массива не стоят, значит происходит работа с нулевой ячейкой массива:

    $mass="text"
    ! равнозначно
    $mass[0]="text"

Если индекс в квадратных скобках не указан, значит мы работаем с последней ячейкой массива:

    ! создаём новую ячейку в конце массива и присваиваем ей значение
    $mass[]="last_cell"

    ! получаем значение из последней ячейки массива:
    $mass[]

Фигурные скобки {}

Фигурные скобки {} в QSP выступают как спецсимволы, отмечающие начало и конец строковых значений. Иными словами, по наличию таких скобок плеер может понять, где начинается и где кончается строковое значение:

    *pl {Текст, который будет выведен на экран.}

Особенностью указания текстового значения с помощью фигурных скобок является то, что в таких строках не раскрываются подвыражения:

    health=150
    *pl {Здоровье: <<health>>}
    ! на экран будет выведен текст 'Здоровье: <<health>>'
    *pl "Здоровье: <<health>>"
    ! на экран будет выведен текст 'Здоровье: 150'

Для большей совместимости с различными версиями плееров, а так же для удобства чтения, фигурные скобки следует в основном использовать для записи кода, предназначенного для оператора dynamic или функции dyneval:

    *pl $dyneval({$result = $mid("abcd",2,1)+"qwerty"})
    dynamic {
        $args[0]
        addobj $args[1]
    },'Текст','Вилка'

Так же фигурные скобки можно использовать для написания многострочных комментариев:

    ! {
        многострочный
        комментарий
    }

Допустимо вложение любого количества фигурных скобок друг в друга.

Кавычки ""

Кавычки "" (двойные апострофы) в QSP выступают как спецсимволы, отмечающие начало и конец строковых значений. Иными словами, по наличию кавычек плеер может понять, где начинается и где кончается строковое значение:

    *pl "Текст, который будет выведен на экран."

Особенностью указания текстового значения с помощью апострофов является то, что в таких строках раскрываются подвыражения:

    health=150
    *pl "Здоровье: <<health>>"
    ! на экран будет выведен текст 'Здоровье: 150'

Кавычки внутри строки можно экранировать дублированием:

    *pl "В кабачке ""У Мо"" сегодня весело и шумно."

Так же кавычки можно использовать для написания многострочных комментариев:

    ! "
        многострочный
        комментарий
    "

Апострофы ''

Апострофы '' в QSP выступают как спецсимволы, отмечающие начало и конец строковых значений. Иными словами, по наличию апострофов плеер может понять, где начинается и где кончается строковое значение:

    *pl 'Текст, который будет выведен на экран.'

Особенностью указания текстового значения с помощью апострофов является то, что в таких строках раскрываются подвыражения:

    health=150
    *pl 'Здоровье: <<health>>'
    ! на экран будет выведен текст 'Здоровье: 150'

Кавычки внутри строки можно экранировать дублированием:

    *pl 'Руг''Ста''Раг сказал: — Что ты хочешь, мора? Хочешь мухомора?'

Так же апострофы можно использовать для написания многострочных комментариев:

    ! '
        многострочный
        комментарий
    '

< Назад, к странице 178
Вперёд, к странице 180 >

Aleks Versus'HowDo-F.A.Q.'2021-2022

Aleks Versus'Game Adventure Making'Really Unimaginable Stories'2013-2022

 

Содержание

1. В чём разница?

1.1. В чём разница между set x=10, let x=10 и x=10?

1.2. В чём разница между переменной со знаком $ и без знака $?

1.3. В чём разница между ' ' (апострофы) и " " (кавычки)?

1.4. В чём разница между *pl "строка" и просто " строка" ?

1.5. Чем отличаются эти две команды? *pl "<<$perem>>" и *pl $perem

1.6. В чём разница между dynamic и dyneval?

1.7. В чём разница между gt и goto?

1.8. Чем отличается goto от gosub?

18.1. Чем отличаются команды addqst и openqst?

Источники и дополнительные материалы

2. Вопросы о $COUNTER

2.1. Как сделать, чтобы значение переменной изменялось с течением времени?

2.2. Как сделать, чтобы из одной локации меня через пару секунд перебрасывало в другую локацию?

2.3. Как сделать, чтобы через пару секунд после входа на локацию появлялось новое действие?

2.4. Как сделать, чтобы цикл выполнялся параллельно остальному коду, а не прерывал его?

Источники и дополнительные материалы

3. Вопросы о MSG и $INPUT

3.1. Как вывести на экран отдельное окошко с текстом? | Подскажите аналог команды alert в QSP.

3.2. Как вывести на экран окошко, в котором игрок должен ввести текст? | Подскажите аналог команды prompt в QSP.

3.3. Как прикрутить возможность выбора варианта к окну msg? | Подскажите аналог команды confirm в QSP.

3.4. Как сделать ввод имени игроком?

3.5. Как увеличить число правильных ответов, которые может ввести игрок? | Как сделать варианты для ответа через $input?

Источники и дополнительные материалы

4. Вопросы о меню

4.1. Как сделать меню предмета?

4.2. Как сделать разные меню для двух и более предметов?

4.3. Как сделать меню в ссылках?

4.4. Как передавать локациям-пунктам меню аргументы?

4.5. Как делать контекстное (динамическое) меню?

4.6. Как вставить разделитель в меню?

4.7. Как вставить картинки в меню?

Источники и дополнительные материалы

5. Вопросы по $ONNEWLOC

5.1. Как сделать так, чтобы не писать один и тот же код в каждой локации?

5.2. Как сделать кнопку "Назад", работающую на каждой локации?

5.3. Почему в args на локации-обработчике перехода на новую локацию уже есть данные?

Источники и дополнительные материалы

6. Вопросы по звуковым файлам в QSP

6.1. Как вставить музыку или звук в игру?

6.2. Как запустить две звуковые дорожки?

6.3. Как при переходе на новую локацию прервать одну мелодию и запустить другую?

6.4. Как перезапустить звуковую дорожку?

6.5. Как приглушить музыку?

6.6. Как зациклить мелодию?

Источники и дополнительные материалы

7. Вопросы о гиперссылках

7.1. Как делать гиперссылки, по нажатию на которые выполняется код? | Как делать кликабельный текст? | Как сделать, чтобы по нажатию на текст что-то происходило?

7.2. Как менять цвет гиперссылки?

7.3. Как помещать в гиперссылки сложный код?

7.4. Как сделать гиперссылки без подчёркивания?

Источники и дополнительные материалы

8. Есть ли команда...

8.1. Какой командой можно очистить окно дополнительного описания?

8.2. Существует ли команда для того, чтобы получить название текущей локации?

8.3. Какой командой можно вывести текст в окно дополнительного описания?

8.4. Есть ли команда, которая делает выход из игры?

Источники и дополнительные материалы

9. Вопросы о изображениях

9.1. Как вставить картинку в игру?

9.2. Можно ли вставить в игру gif-файл?

9.3. Как вставить картинку в действие?

9.4. Как поставить картинку фоном?

9.5. Как выводить изображения послойно? Накладывать друг на друга?

9.6. Как сделать кликабельное изображение? | Как сделать так, чтобы при щелчке по изображению выполнялись какие-то действия?

9.7. Как сделать сменяемое изображение на локации?

9.8. Как сделать вывод рандомного изображения?

Источники и дополнительные материалы

10. Интерфейс, дизайн, украшения

10.1. Для чего нужен оператор REFINT, и как он работает?

10.2. Как изменить цвет фона в игре?

10.3. Как изменить формат части текста? Размер, цвет, наклон и т.д.?

10.4. Как сделать красивый фон в классическом плеере?

10.5. Хочу, чтоб в игре окна располагались определённым образом. Как это сделать?

10.6. Можно ли задавать размер окон из кода игры? Чтобы в одной локации были одни настройки, в другой — другие.

10.7. Настроил расположение окна предпросмотра, но когда выключаю его, другие окна смещаются, как это исправить?

10.8. Как изменить цвет подсветки действий?

10.9. Как изменить цвет фона для отдельного окна?

10.10. Как сделать плавное появление текста? | Как сделать плавное изменение цвета фона? | Как сделать плавное изменение цвета текста?

10.11. Как использовать в игре собственный шрифт?

10.12. С предметов можно снимать выделение, а можно ли снять выделение с действия?

Источники и дополнительные материалы

11. Вопросы об условиях

11.1. При проверке условия записано просто число, без операции сравнения, но QSP не выдаёт ошибку. Почему?

11.2. Как сделать так, чтобы действие появлялось только при определённом условии?

11.3. Видел в одной из игр, как после нажатия на действие, оно становится неактивным. Как это сделать?

11.4. Как добавить текст, который будет выводиться только при выполнении определённого условия?

11.5. Как сделать, чтобы в диалоговом окне текст набирался в зависимости от условий? Чтобы при срабатывании одного или обоих условий текст в любом случае выводился? Логическое ИЛИ (OR).

11.6. Как упростить условие с логическим И (AND)?

11.7. Как упростить взаимоисключающие условия? Логическое XOR.

Источники и дополнительные материалы

12. Вопросы о DYNAMIC

12.1. Зачем нужен оператор dynamic?

12.2. Можно ли сделать переменную с рандомным (случайным) названием?

12.3. Создаю действия с помощью цикла, но они работают неправильно. Что делать?

12.4. Почему не работает dynamic?

Источники и дополнительные материалы

13. Не работает...

13.1. Рисую таблицу и хочу зафиксировать высоту, но атрибут height не работает.

13.2. Пытаюсь использовать разные HTML-теги в игре, но они не работают — просто не выводятся. Почему?

13.3. Не работает IIF!

13.4. Пытаюсь сделать кликабельную картинку с помощью тегов MAP и AREA, но ничего не получается. | Не выводится картинка, не работает область клика, область клика смещена.

13.5. Не работает *pl в действии с goto.

13.6. В AeroQSP не работает атрибут.

13.7. Не работает гиперссылка в AeroQSP.

13.8. Не работает оператор JUMP — не может найти метку.

13.9. Не работает многострочный код. Как исправить?

13.10. Не работает многострочный код. Как исправить?

13.11. Сколько END`ов нужно добавить?

13.12. Не работает условие. Как исправить? (if skrom>10 and <15)

13.13. Не работают десятичные дроби, дробные числа, числа с запятыми!

Источники и дополнительные материалы

14. Вопросы о предметах

14.1. Как добавить предмет в окно предметов?

14.2. Как удалить предмет из окна предметов?

14.3. Как удалить все предметы?

14.4. Как добавить предмет в определённую позицию в окне предметов?

14.5. Как заменить один предмет на другой?

14.6. Как делать динамические/считаемые предметы? | Как делать стакающиеся предметы? | Как делать предметы рядом с названиями которых выводится их количество?

14.7. Как добавить предмет с картинкой но без названия?

14.8. Как сделать, чтоб при щелчке по предмету выполнялся какой-либо код?

14.9. Как снять выделение предмета? | Как сделать, чтобы выбранный предмет можно было кликнуть ещё раз?

14.10. Как сделать два списка предметов? Например для игры за разных персонажей.

14.11. Как сделать, чтобы плеер выполнял определённый код при добавлении любого предмета?

14.12. Как сделать два разных предмета с одинаковыми названиями?

14.13. Как сделать многоуровневый рюкзак? | Как сделать предметы в предметах?

14.14. Можно ли выводить предметы не в окне предметов?

Источники и дополнительные материалы

15. Вопросы о строке ввода

15.1. Зачем вообще нужна строка ввода (поле ввода)?

15.2. Как задействовать строку ввода в игре?

Источники и дополнительные материалы

16. Вопросы по вёрстке

16.1. Можно ли писать текст поверх вставленной картинки (не бэкграунда)?

16.2. Возможно ли сделать плавный переход между локациями?

16.3. Как расположить картинку справа, а текст слева?

16.4. Как ограничить размер выводимого изображения?

16.5. Как сделать рамку окна основного описания? | Как сделать, чтобы картинки шли по контуру основного окна?

16.6. Как сделать вывод предметов магазина не длинным списком, а в виде таблицы?

16.7. Можно ли зеркально отразить картинку методами плеера? | Можно ли задать максимальную или минимальную ширину элементу? | Можно ли вычислить доступное место в основном окне?

16.8. Вывожу в окно табличку, а потом текст, но между текстом и табличкой возникают пустые строки. Что это и как этого избежать?

16.9. Можно как нибудь вывести текст в два столба в классике? К примеру характеристики персонажей.

16.10. Как работать с тегами MAP и AREA? Как разметить картинку на кликабельные зоны?

Источники и дополнительные материалы

17. Вопросы о сохранениях

17.1. Как запретить игроку самостоятельно сохранять игру?

17.2. Во время теста игры делал сохранения, затем внёс в игру несколько правок, но сохранения перестали загружаться. Почему так происходит, и что теперь делать?

17.3. Как сделать чекпойнты в игре?

17.4. Как написать действие, которое при каждом клике сохраняло бы игру в файлы "1.sav" и "2.sav" поочерёдно?

Источники и дополнительные материалы

18. Вопросы о файлах и модулях

18.1. Чем отличаются команды addqst и openqst?

18.2. Как сделать лаунчер?

18.3. Мне нужно узнать, есть ли в папке файл (картинка, музыка и т.д.). Как это сделать?

18.4. Перенёс файл игры из одной папки в другую. В Quest Generator пропали все папки. Почему так происходит, и как этого избежать?

18.5. В папке с игрой стали появляться файлы с расширением .tmp. Что это за файлы, нужны они, и как избавиться от их появления?

Источники и дополнительные материалы

19. Изыски

19.1. Как использовать ASCII-графику в QSP?

19.2. Как вставить в игру видео?

19.3. Как сделать так, чтобы текст появлялся на экране постепенно? По буквам?

19.4. Как защитить игру от чита?

19.5. Как задействовать клавиатуру в игре?

19.6. Как пропустить прохождение нескольких глав, чтобы протестировать вновь написанную главу и только её?

19.7. Как из под плеера выполнить произвольную строку кода?

19.8. Как узнать, на каком устройстве запущена игра? Телефон, компьютер, планшет?

19.9. Как обновлять переменные на экране?

19.10. Как сделать, чтобы текст выводился снизу вверх?

Источники и дополнительные материалы

20. Конкретные задачи

20.1. Как сделать возврат на предыдущую локацию?

20.2. Как проверить число на чётность?

20.3. Как сделать шанс на выпадение определённой вещи? Например 25 процентный шанс на то, что в сундуке окажется золотая чаша?

20.4. Как сделать, чтобы текст выводился не внизу окна основного описания, а сверху?

20.5. Как можно удалить часть текста из описания?

20.6. Как вывести на экран HTML-разметку, не отключая режим распознавания HTML? То есть при usehtml=1.

20.7. Есть несколько переменных с разными значениями. Как получить имя переменной, в которой находится наибольшее значение?

20.8. Как в QSP сравнить два массива?

20.9. Как сделать вытягивание случайных карт из колоды? Карты вытягиваются несколько раз, но они не должны повторяться.

20.10. Как отсортировать данные? Например, список персонажей по алфавиту, или набор чисел от меньшего к большему.

20.11. Как сделать проценты?

20.12. Как решить задачу по поиску случайного набора слагаемых?

20.13. Как разредить текст пробелами?

20.14. Как сделать записную книжку в игре?

20.15. Как сделать так, чтобы на локацию можно было зайти только один раз?

20.16. Как заставить действия выводиться в нужном мне порядке?

20.17. Как сделать в игре книгу? Чтобы её можно было взять и потом прочитать?

20.18. Как сделать склад, сундук, тайник, место, в котором можно выкладывать и хранить предметы?

20.19. Как сделать выпадение случайного действия на локации?

20.20. Как сделать перемещение на случайную локацию?

20.21. Как сделать случайный предмет?

20.22. Как узнать, какие переменные есть в игре? Может для этого есть специальная команда?

20.23. Как убрать преформатирование из HTML-разметки?

Источники и дополнительные материалы

21. Вопросы по Quest Generator (v.4.0.0.Beta)

21.1. Мне часто приходится вставлять одинаковые или почти одинаковые кусочки кода. Как автоматизировать этот процесс?

21.2. Делаю преформатирование пробелами, чтобы появлялась вертикальная полоска, так нагляднее. Нет ли какой-то комбинации клавиш, чтобы не тыкать пробел по пять раз?

21.3. Как свернуть кусочек кода, написанный под комментарием? В идеале, чтоб остался один только комментарий.

Источники и дополнительные материалы

22. Вопросы о Quest Navigator (v.0.0.28)

22.1. Пишу несколько игр в Quest Navigator. Как сделать, чтобы у каждой игры было собственное оформление?

22.2. Как подключить свой шрифт к игре?

22.3. Пишу <strong>bcolor=rgb(255,200,200)</strong>, но это не меняет цвет фона игры. Как изменить цвет фона из кода QSP?

22.4. Хочу прописать игре собственный вид курсора, как это сделать?

22.5. Скопировал шаблон оформления в папку со своей игрой, но что с ним теперь делать? Не пойму, что за что отвечает.

22.6. Как узнать, на каком плеере запущена игра, на классическом QSP, или на Quest Navigator?

22.7. Как вставить видео в игру на Навигаторе?

22.8. Как делать standalone-сборку на Навигаторе? | Независимая сборка на Quest Navigator

22.9. Где в Quest Navigator править размер окна с игрой? Например мне надо, чтобы игра изначально открывалась в разрешении 1280х720.

22.10. Как выполнить JavaScript прямо из кода QSP?

22.11. Инструкция посмене оформления из кода QSP?

Источники и дополнительные материалы

23. Ограничения

23.1. Видел в справке ограничение на 100 подключаемых файлов? Это что, я не смогу использовать более ста файлов картинок и музыки?

23.2. Хочу разместить на локации около 100 действий. Это вообще возможно?

23.3. Генерирую переменные с помощью оператора dynamic, и вдруг выходит ошибка 123. Что это, и как с этим бороться?

Источники и дополнительные материалы

24. Вопросы по работе с плеерами

24.1. Как сделать так, чтобы AeroQSP запускался прямо из Quest Generator?

24.2. Как сделать StandAlone-сборку на классическом плеере? | Можно ли сделать игру так, чтобы играть без плеера? | Как сделать пакетный файл запуска, чтобы игрок тыкал иконку start и сразу начинал играть?

Источники и дополнительные материалы

Зарезервированные слова, системные переменные, спецсимволы

Операции

Операторы

Функции

Системные переменные

Иные синтаксемы

Алфавитный указатель ключевых слов, спецсимволов, синтаксем

Источники и дополнительные материалы